package br.com.naybee.framework.client.utils;

import java.util.List;
import java.util.Map;

public class ValidatorUtils {

	ValidatorUtils() {
	}

	/**
	 * Verifica se é <code>null</code>
	 * 
	 * <p>
	 * Exemplo:<br>
	 * 
	 * <pre>
	 * {@code
	 * if(isNull(objeto))
	 *    faz algo
	 * }
	 * </pre>
	 * 
	 * </p>
	 * 
	 * @param obj
	 *            que será verificado
	 * @return {@code true} se o objeto for <code>null</code>
	 */
	public static Boolean isNull(Object obj) {
		return obj == null;
	}

	/**
	 * Verica se não é <code>null</code>
	 * <p>
	 * Exemplo:<br>
	 * 
	 * <pre>
	 * {@code
	 * if(notNull(objeto))
	 *    faz algo
	 * }
	 * </pre>
	 * 
	 * </p>
	 * 
	 * @param obj
	 *            que será verificado
	 * @return {@code true} se o objeto não for nulo.
	 */
	public static boolean notNull(Object obj) {
		return !isNull(obj);
	}

	/**
	 * Verifica se não é vazio.
	 * <p>
	 * Exemplo:
	 * 
	 * <pre>
	 * if (notEmpty(usuario))
	 * 	aprovados.add(usuario);
	 * </pre>
	 * 
	 * @param value
	 *            Valor verificado.
	 * @return {@code true} se value não for {@code null} e não for vazio.
	 */
	public static Boolean notEmpty(String value) {
		return notNull(value) && !value.isEmpty();
	}

	/**
	 * O mesmo que {@linkplain #notEmpty(String) aqui}.
	 */
	public static Boolean notEmpty(Map<?, ?> value) {
		return notNull(value) && !value.isEmpty();
	}

	/**
	 * O mesmo que {@linkplain #notEmpty(String) aqui}.
	 */
	public static Boolean notEmpty(List<?> list) {
		return notNull(list) && !list.isEmpty();
	}

	/**
	 * Verifica se a string é {@code Null} ou vazia utilizando isEmpty da class {@linkplain String}
	 * 
	 * @param str
	 * @return
	 */
	public static Boolean empty(String str) {
		return isNull(str) || str.isEmpty();
	}

	/**
	 * Verifica se o primeiro parâmetro é maior que o segundo parâmetro
	 * 
	 * @param number
	 * @param base
	 * @return
	 */
	public static Boolean greaterThan(int number, int base) {
		return number > base;
	}

	/**
	 * Verifica se o primeiro parâmetro é maior ou iqual ao segundo parâmetro
	 * 
	 * @param number
	 * @param base
	 * @return
	 */
	public static Boolean greaterEqualsThan(int number, int base) {
		return number >= base;
	}

	/**
	 * Verifica se o primeiro parâmetro é menor que o segundo parâmetro
	 * 
	 * @param number
	 * @param base
	 * @return
	 */
	public static Boolean lessThan(int number, int base) {
		return number < base;
	}

	/**
	 * Verifica se o primeiro parâmetro é menor ou iqual ao segundo parâmetro
	 * 
	 * @param number
	 * @param base
	 * @return
	 */
	public static Boolean lessEqualsThan(int number, int base) {
		return number <= base;
	}
	
}
